#include"ringQueue.hpp"
#include<unistd.h>
#include<sys/types.h>
#include<ctime>
#include<cstdlib>
//消费者
void* consumer(void* args)
{
    RingQueue<int>* rq=(RingQueue<int>*)args;
    while(true)
    {
        sleep(3);
        int x;
        rq->Pop(&x);
        std::cout<<"消费："<<x<<"["<<pthread_self()<<"]"<<std::endl;
    }
}
//生产者
void* producer(void* args)
{
    RingQueue<int>* rq=(RingQueue<int>*)args;
    while(true)
    {
        int x=rand()%100+1;
        std::cout<<"生产："<<x<<"["<<pthread_self()<<"]"<<std::endl;

        rq->Push(x);
    }
}

int main()
{
    srand((uint64_t)time(nullptr)^getpid());
    RingQueue<int>* rq=new RingQueue<int>();
    pthread_t c[3],p[2];
    for(int i=0;i<3;i++)pthread_create(c+i,nullptr,consumer,(void*)rq);
    for(int i=0;i<2;i++)pthread_create(p+i,nullptr,producer,(void*)rq);

    for(int i=0;i<3;i++)pthread_join(c[i],nullptr);
    for(int i=0;i<2;i++)pthread_join(p[i],nullptr);
    return 0;
}